package com.yunke.common.util;

import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;

/**
 * 时间转换工具类
 * 
 * @author yunke
 * @since 1.0.0
 */
public class YunkeTimeUtil {

    /**
     * 将时间戳（毫秒）转换为 LocalDateTime
     *
     * @param timestamp 时间戳（毫秒）
     * @return LocalDateTime
     */
    public static LocalDateTime timestampToLocalDateTime(long timestamp) {
        return LocalDateTime.ofInstant(Instant.ofEpochMilli(timestamp), ZoneId.systemDefault());
    }

    /**
     * 将 LocalDateTime 转换为时间戳（毫秒）
     *
     * @param localDateTime LocalDateTime
     * @return 时间戳（毫秒）
     */
    public static Long localDateTimeToTimestamp(LocalDateTime localDateTime) {
        if (localDateTime == null) {
            return null;
        }
        return localDateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
    }

    /**
     * 将时间戳（秒）转换为 LocalDateTime
     *
     * @param timestamp 时间戳（秒）
     * @return LocalDateTime
     */
    public static LocalDateTime timestampSecondsToLocalDateTime(long timestamp) {
        return LocalDateTime.ofInstant(Instant.ofEpochSecond(timestamp), ZoneId.systemDefault());
    }

    /**
     * 将 LocalDateTime 转换为时间戳（秒）
     *
     * @param localDateTime LocalDateTime
     * @return 时间戳（秒）
     */
    public static Long localDateTimeToTimestampSeconds(LocalDateTime localDateTime) {
        if (localDateTime == null) {
            return null;
        }
        return localDateTime.atZone(ZoneId.systemDefault()).toEpochSecond();
    }

    /**
     * 获取当前时间戳（毫秒）
     *
     * @return 当前时间戳（毫秒）
     */
    public static long currentTimeMillis() {
        return System.currentTimeMillis();
    }

    /**
     * 获取当前时间戳（秒）
     *
     * @return 当前时间戳（秒）
     */
    public static long currentTimeSeconds() {
        return System.currentTimeMillis() / 1000;
    }
} 